草庐IT

Java BufferedImage 内存消耗

全部标签

c++ - 使用 STL 编写内存泄漏安全代码应该避免什么?

我使用STL已经有一段时间了,但除了在其他代码中偶尔使用vector之外,主要是为了实现它而实现算法。在我开始更多地使用它之前,我想知道人们在使用STL时常犯的错误是什么——特别是,在使用STL模板以防止我的代码发生内存泄漏时,我应该注意什么? 最佳答案 有效使用STL有很多瓶颈,如果你想了解更多,我推荐这本书"EffectiveSTL"byS.Meyers. 关于c++-使用STL编写内存泄漏安全代码应该避免什么?,我们在StackOverflow上找到一个类似的问题:

c++ - 每次循环迭代时清理 vector 。最有效的内存方式是什么?

我有一个关于std::vector的问题。我有一个非常占用内存的算法,我预见到预测vector大小并提前为vector保留足够的内存将帮助我减少内存使用量。以下哪个更好:for(...){std::vectormy_vector;my_vector.reserve(stuff_count);//Dostuff,andappendstufftomy_vector.}或者这个:std::vectormy_vector;for(...){my_vector.clear();my_vector.reserve(stuff_count);//Dostuff,andappendstufftomy_

C++:我可以使用指针超出应用程序内存的范围吗?

如果我有这样一些愚蠢的代码:intnBlah=123;int*pnBlah=&nBlah;pnBlah+=80000;*pnBlah=65;我可以更改另一个应用程序的内存吗?你已经向我解释了这是邪恶的,我知道。但我只是感兴趣。这不是简单尝试的事情。我不知道会发生什么。谢谢 最佳答案 在C++术语中,这是未定义的行为。实际发生的情况取决于许多因素,但最重要的是取决于您使用的操作系统(OS)。在现代内存管理的操作系统上,您的应用程序将因尝试访问进程地址空间之外的内存而因“段错误”(实际术语取决于操作系统)而终止。然而,一些操作系统没有这

c++ - 使用 C++ 模拟低内存

我正在调试一个在内存不足的情况下失败的程序,并且想要一个只消耗大量内存的C++程序。任何指针都会有所帮助! 最佳答案 您在Windows平台上吗(查看用户名...也许不是:))如果您在Windows平台上,AppVerifier具有低内存模拟模式。请参阅低资源模拟测试。 关于c++-使用C++模拟低内存,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1923664/

c++ - C++中的delete如何知道要删除多少个内存位置

删除运算符是如何工作的?它比free()更好吗?此外,如果您执行ptr=newchar[10],然后使用deleteptr删除,指针如何知道要删除多少个位置。 最佳答案 只有delete操作符,free只作为函数存在。在C++下,我们鼓励您使用new/delete而不是malloc()/free()。删除运算符有一个内部的“魔法”。当使用new[]创建数组时,数组的大小存储在内存块的元数据中。delete[]使用该信息。所有这些当然都依赖于编译器、操作系统、优化器和实现。 关于c++-C

c++ - 如果使用 delete 而不是 free 删除使用 malloc 分配的内存怎么办

我遇到了一个我无法解决的问题。我的问题是,如果我使用malloc分配内存,然后使用delete删除内存块?一般的经验法则是Ifweallocatememoryusingmalloc,itshouldbedeletedusingfree.Ifweallocatememoryusingnew,itshouldbedeletedusingdelete.现在,为了检查如果我们反过来会发生什么,我写了一个小代码。#include#include#includeusingnamespacestd;classA{intp=10;public:intlol(){returnp;}};intmain()

c++ - (C++) 寻找减少内存使用的技巧

我遇到了一个非常严格和严格的内存限制问题。我是CPP极客,我想减少内存使用量。请给我一些提示。我的一个friend建议从我的结构中取出函数。例如,而不是使用:structnode{intf(){}}他推荐我使用:intf(nodex){}这真的有用吗?注意:我有很多我的结构的拷贝。这里有一些更多的信息:我正在为在线裁判的练习题编写某种线段树。我在结构中获取树节点。我的结构有这些变量:intstart;intend;boolflag;node*left;node*right;内存限制为16MB,我使用的是16.38MB。 最佳答案 根

C++ 内存管理和 vector

我对与vector相关的内存管理感到非常困惑,可以解释一些基本概念。我有一个使用大vector的程序。我使用new运算符创建vector,并在程序结束时使用delete释放它们以获得内存恢复。我的问题是,如果程序因任何原因崩溃或中止,delete行将丢失,有没有办法恢复内存,即使在这种情况。我还分配了一些其他大vector,但没有使用new关键字。我已经读到,这些将在堆上创建,但无论如何都不需要释放,因为内存管理是在“幕后”处理的。但是我不确定是不是这种情况,因为每次我运行程序时都会丢失RAM。所以我的第二个问题是,如果不使用new关键字创建的vector是否真的可以留给它们自己的设备

c++ - 分配给 new 的内存是否会自动释放?

我99%确定答案是盲目的否。请验证我的以下代码会产生内存泄漏的命题。Data&getData(){Data*i=newData();return*i;}voidexampleFunc(){Datad1=getData();Datad2;/*d1isnotdeallocatedbecauseitisontheheap,andd2is*becauseitisonthestack.*/}请注意,这是一个过于简化的示例,很明显您实际上不会使用上面的代码...因此无需指出这一点,谢谢。更新1:除此之外,如果我将指针分配给一个引用会怎么样?在这种情况下,我假设数据未被复制...Data&getDa

c++ - C++ 什么时候从内存中删除变量?

我使用C++有一段时间了。我只是不确定内存管理是如何工作的,所以这里是:我首先不确定函数中的内存是如何取消分配的,例如:intaddTwo(intnum){inttemp=2;num+=temp;returnnum;}所以在这个例子中,temp会在函数结束后从内存中删除吗?如果不是,这是怎么做到的。在C#中,一旦变量的作用域用完,它就会被删除。还有其他我应该知道的情况吗?谢谢 最佳答案 在C++中有一个非常简单的经验法则:所有内存在超出范围时都会自动释放,除非手动分配。手动分配:由new()分配的任何对象必须由匹配的delete()